/******************************************************************************/
package jamie.org.sil.www.usxUtils;

import java.io.*;



/******************************************************************************/
/**
 * An interface to provide a common basis for all specialist consumers of
 * configuration information.
 * <p>
 *
 * Much configuration information comes as single stand-alone parameters,
 * which can be read and understood in a standard way without reference to
 * the tag hierarchy in which it occurs.  However, there are some collections
 * of configuration information which can only be understood relative to the
 * hierarchy in which they occur (although I'm working to minimise the number
 * of these) or which require special processing perhaps -- as for scripture
 * book information -- because they form part of a set of related information
 * which needs to be processed and made available in a particular way.
 * <p>
 *
 * The {@code Config} class can deal with simple configuration parameters,
 * but it can't cope with these more complex ones, which have to be processed
 * by a class which understands them in more detail.
 * <p>
 *
 * It is these specialist classes which I refer to here as <i>SpecialistConfigConsumers</i>.
 * <p>
 *
 * These classes are actually invoked from processing within {@code Config},
 * and it is therefore convenient for them to present a standard interface,
 * which is defined here.
 */

public interface SpecialistConfigConsumer
{
  /****************************************************************************/
  /****************************************************************************/
  /**                                                                        **/
  /**                               Public                                   **/
  /**                                                                        **/
  /****************************************************************************/
  /****************************************************************************/

  /****************************************************************************/
  /** Loads config data from the given file.  The <i>type</i> parameter must
   *  be drawn from a standard list, because it is used to work out which
   *  specific implementor of the present class to invoke.  It is normally
   *  picked up by the {@code Config} class when it reads a <i>configFile</i>
   *  parameter.
   *
   * @param fileName
   * @param type Type of config information available from this file.
   * @throws ConverterException
   * @throws IOException
   * @throws javax.xml.parsers.ParserConfigurationException
   * @throws org.xml.sax.SAXException
   */
    
  public void load (String fileName, String type) throws ConverterException,
                                                         IOException,
                                                         javax.xml.parsers.ParserConfigurationException,
                                                         org.xml.sax.SAXException;
}




